package com.wanyangproject.androidlearning.designMode.strategy;

public class StrategyTest {

    /*
    * 策略模式：一个类的行为或其算法可以在运行时更改。这种设计模式成为行为模式。
    * 应用场景：系统里有许多类，区分它们的只有行为不同，策略模式可以动态的让一个对象在众多行为中选择一种。
    *           多种条件判断的场景。
    *           多种算法的自由切换
    *
    * 案例：当前有许多鸭子，有真实的鸭子，也有玩具鸭，有的会飞有的却不能飞。有的会鸣叫有的不会。
    *       此外，鸭子都需要一个展示功能。
    *       展示的功能因为每个鸭子都有且外形各不相同，因此可以顶一个抽象的基类方法；而飞行方式只有两种：会飞和不会飞，因此可以抽象成一个接口，实现方式为实现该接口的两个类。鸣叫也是一样，抽象成一个接口，实现方式为该接口的两个类。
    *
    * */

    public static void main(String[] args){
        Duck duck = new Duck2();
        duck.display();
        duck.name();
        duck.fly();
        duck.tweet();

        System.out.println("---------------");
        Duck duck2 = new BigYellowDuck();
        duck2.display();
        duck2.name();
        duck2.fly();
        duck2.tweet();

        System.out.println("---------------");
        Duck duck3 = new OuterSpaceDuck();
        duck3.display();
        duck3.name();
        duck3.fly();
        duck3.tweet();

    }



}
